/************************************************************************
 * Este archivo, representa metodos y variables relacionadas con las altas
 * bajas y modificaciones de vehiculos asociados a determinados clientes
 * 
 * @system: veco-system
 * @description: Sistema de control vehicular
 * @version: 1.0
 * @Copyright © 2013 
 * 
 * @authores:
 * 
 *      > Alberione, Fernando    <falberione_037@gmail.com>
 * 
 *      > Boretto, Martin        <martinboretto@gmail.com>
 * 
 *      > Lenarduzzi, Federico   <fedeatenas@gmail.com>
 * 
 *      > Ocampo, Emanuel        <eocampo86@gmail.com>
 *
 *************************************************************************/

package SistemaCocheras;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class manejadorVehiculo{

    private Connection conexion = null;
    
    
    // ---------------------------------------------------------
    // ------- Seccion de constructores de la clase
    // ---------------------------------------------------------    

    /**
     * Constructor NO vacio
     */
    public manejadorVehiculo(Connection c){
        this.conexion = c;
    }// Fin constructor


    
    // ---------------------------------------------------------
    // ------- Seccion de metodos publicos
    // ---------------------------------------------------------    

    /**
     * Metodo encargado de insertar un vehiculo sin un cliente asociado al 
     * mismo
     * @param dominioV Representa el dominio del vehiculo
     * @param marcaV Representa la marca del vehiculo
     * @param modeloV Representa el modelo del vehiculo
     * @param tipoVehiculo Representa el tipo de vehiculo
     * @throws IOException
     * @throws SQLException 
     */
    public void insertarVehiculoSinCliente(String dominioV, String marcaV, String modeloV, int tipoVehiculo) throws IOException,SQLException {
        Statement statemen = this.conexion.createStatement();
        String query = "INSERT INTO vehiculo(dominio, marca, modelo, tipo) VALUES('"+dominioV+"', '"+marcaV+"', '"+modeloV+"', '"+tipoVehiculo+"')";
        statemen.executeUpdate(query);
    }// Fin insertarVehiculoSinCliente

    
    /**
     * Metodo encargado de asociar un vehiculo a un cliente determinado
     * @param dominioV Representa el dominio del vehiculo
     * @param marcaV Representa la marca del vehiculo
     * @param modeloV Representa el modelo del vehiculo
     * @param dniDueño Representa el dni del duenio del vehiculo
     * @param tipoVehiculo Representa el tipo de vehiculo 
     * @throws IOException
     * @throws SQLException 
     */
    public void insertarVehiculoConCliente(String dominioV, String marcaV, String modeloV, String dniDuenio, int tipoVehiculo) throws IOException,SQLException {
        Statement statemen = this.conexion.createStatement();
        String query = "INSERT INTO vehiculo VALUES('"+dominioV+"', '"+marcaV+"', '"+modeloV+"', '"+dniDuenio+"', '"+tipoVehiculo+"')";
        statemen.executeUpdate(query);
    }// Fin insertarVehiculoConCliente

    
    /**
     * Metodo encargado de actualizar el dni del propietario del vehiculo pasado
     * como parametro
     * @param dominioV Representa el dominio del vehiculo a actualizar su informacion
     * @param dni Representa el nuevo dni asociado al vehiculo
     * @throws SQLException 
     */
    public void insercionFicticiaVehiculo(String dominioV, String dni) throws SQLException{
        Statement statemen = this.conexion.createStatement();
        String query = "UPDATE vehiculo SET dni_propietario = '"+dni+"' WHERE(dominio ='"+dominioV+"')";
        statemen.executeUpdate(query);
    }// Fin insercionFicticiaVehiculo

    
    /**
     * Metodo encargado de "eliminar" un vehiculo determinado. 
     * @param dominioV Representa el dominio del vehiculo a eliminar
     * @throws SQLException 
     */
    public void eliminarVehiculo (String dominioV)throws SQLException{
        Statement statemen = this.conexion.createStatement();
        String query = "UPDATE vehiculo SET dni_propietario = NULL WHERE(dominio ='"+dominioV+"')";
        statemen.executeUpdate(query);
    }// Fin eliminarVehiculo

    
    /**
     * Metodo encargado de buscar en la base de datos un determinado vehiculo
     * @param dominioV Representa el vehiculo a buscar en la base de datos
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarVehiculoPorDominio(String dominioV)throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM vehiculo WHERE(dominio ='"+dominioV+"')";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarVehiculoPorDominio
    
    
    /**
     * Metodo encargado de buscar los vehiculos asociados a un cliente determinado
     * @param dni Representa al propietario de los vehiculos a buscar
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarVehiculosPorCliente(String dni)throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM vehiculo WHERE(dni_propietario ='"+dni+"')";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarVehiculosPorCliente
    
    
    /**
     * Metodo encargado de buscar el vehiculo asociado a mas de un cliente
     * @param dominioV Representa el dominio del vehiculo
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarVehiculoPorDominioConCliente(String dominioV)throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM vehiculo WHERE(dominio ='"+dominioV+"' AND dni_propietario is NOT NULL)";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarVehiculoPorDominioConCliente

    
    /**
     * Metodo encargado de buscar un vehiculo asociado a un clinte
     * @param dominioV Representa el dominio del vehiculo a buscar
     * @param dni Representa el dni propietario del vehiculo
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarVehiculoPorDominioDNICliente(String dominioV, String dni)throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM vehiculo WHERE(dominio ='"+dominioV+"' AND dni_propietario ='"+dni+"')";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarVehiculoPorDominioDNICliente
    

    /**
     * Metodo encargado de actualizar la informacion de un vehiculo determinado
     * @param dominioV Representa el nuevo dominio del vehiculo
     * @param marcaV Representa la nueva marca del vehiculo
     * @param modeloV Representa el nuevo modelo del vehiculo
     * @param dniDueño Representa el nuevo propiestario del vehiculo
     * @param domAux Representa el vehiculo a modificar
     * @param tipoVehiculo Representa el nuevo tipo del vehiculo
     * @throws IOException
     * @throws SQLException 
     */
    public void actualizarVehiculo(String dominioV, String marcaV, String modeloV, String dniDuenio, String domAux, int tipoVehiculo) throws IOException, SQLException {
        Statement statemen = this.conexion.createStatement();
        String query = "";
        query = "UPDATE  vehiculo SET dominio='"+dominioV+"', marca='"+marcaV+"', modelo='"+modeloV+
                  "', dni_propietario='"+dniDuenio+"', tipo='"+tipoVehiculo+"' WHERE dominio='"+domAux+"'";
        statemen.executeUpdate(query);
    }// Fin actualizarVehiculo
    

    /**
     * Metodo encargado de actualizar la informacion de un vehiculo sin duenio
     * @param dominioV Representa el nuevo dominio del vehiculo
     * @param marcaV Representa la nueva marca del vehiculo
     * @param modeloV Representa el nuevo modelo del vehiculo
     * @param domAux Representa el vehiculo a actualizar su informacion
     * @param tipoVehiculo Representa el nuevo tipo del vehiculo
     * @throws IOException
     * @throws SQLException 
     */
    public void actualizarVehiculoSinDueño(String dominioV, String marcaV, String modeloV, String domAux, int tipoVehiculo) throws IOException, SQLException {
        Statement statemen = this.conexion.createStatement();
        String query = "";
        query = "UPDATE  vehiculo SET dominio='"+dominioV+"', marca='"+marcaV+"', modelo='"+modeloV+
                  "', dni_propietario= NULL, tipo='"+tipoVehiculo+"' WHERE dominio='"+domAux+"'";
        statemen.executeUpdate(query);
    }// Fin actualizarVehiculoSinDueño

    
    /**
     * Metodo encargado de controlar que la patente tenga un formato valido
     * @param dominio Representa el dominio a controlar
     * @return true o false
     */
    public boolean esPatenteValida (String dominio){
        boolean resultado = dominio.length() == 6;
        String letras = dominio.substring(0, 3);
        for (int i = 0; i < 3; i++){
            resultado = resultado && (((letras.charAt(i) >= 'a') && (letras.charAt(i) <= 'z')) || 
                       ((letras.charAt(i) >= 'A') && (letras.charAt(i) <= 'Z')));
        }
        return resultado;
    }// Fin esPatenteValida
    
}// Fin class manejadorCliente
